$(document).ready(function() {
    $.event.add(window, "scroll", main_menu_scroll);

    function main_menu_scroll() {
        var mainmenu = $('#tablaFila1');
        var startMenu = 338;
        var p = jQuery(window).scrollTop();
        $(mainmenu).css('position', ((p) > startMenu) ? 'fixed' : 'static');
        $(mainmenu).css('top', ((p) > startMenu) ? '51px' : '');
    }

    $("#calendario").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: "mm/dd/yy",
        monthNamesShort: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
        dayNamesMin: ["Dom", "Lun", "Mar", "Mié", "Juv", "Vie", "Sáb"],
        onSelect: function() {
            cancelarSeleccion();
            generarCalendario($(this).datepicker('getDate'));
        }
    });
    $("#calendario").datepicker("setDate", today);
    generarCalendario(today);
    $("#selectMostrarCategorias").val(categoriaActiva);
    function generarCalendario(hoy) {
        var hoyReal = new Date();
        var hoyHaceDosDias = new Date(hoyReal.getTime() - (2 * 24 * 3600 * 1000));
        hoyReal.setHours(0, 0, 0);
        hoyHaceDosDias.setHours(0, 0, 0);
        hoy.setHours(0, 0, 0);
        if (hoyHaceDosDias.toDateString() == hoy.toDateString()) {
            $("#botonIrHoy").removeClass("btn-success");
            $("#botonIrHoy").prop("disabled", true);
        } else {
            $("#botonIrHoy").addClass("btn-success");
            $("#botonIrHoy").prop("disabled", false);
        }
        var nombreMeses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dec"]
        var nombreDias = ["Dom", "Lun", "Mar", "Mi&eacute", "Jue", "Vie", "S&aacuteb"];
        var dias = 21;
        var auxFecha = new Date(hoy);
        var fila1 = ["<table id='tablaFila1'><tr><td class='celda-1'>Habitaciones</td>"];
        do {
            var classHoy = "";
            if (auxFecha.getFullYear() == hoyReal.getFullYear() && auxFecha.getMonth() === hoyReal.getMonth() && auxFecha.getDate() === hoyReal.getDate()) {
                classHoy = "diaActualReal";
            }
            var resaltarFinde = "";
            if (auxFecha.getDay() == 6 || auxFecha.getDay() == 0) {
                resaltarFinde = "resaltarFinde";
            }
            fila1.push("<td id='celdaHeader" + dias + "' class='celda-2 " + resaltarFinde + " " + classHoy + "'><div>" + auxFecha.getDate() + "<br>" + nombreMeses[auxFecha.getMonth()] + "<br>" + nombreDias[auxFecha.getDay()] + "</div></td>");
            auxFecha.setDate(auxFecha.getDate() + 1); //Sumar un día
        } while (--dias);
        fila1.push("</tr>");
        fila1 = fila1.join("");
        document.getElementById('fila1').innerHTML = fila1;
        var desde = hoy;
        var hasta = new Date(hoy);
        hasta.setDate(hasta.getDate() + 20);
        var contenidoTablaCalendario = ["<table id='tablaCalendario'>"];
        $.ajax({
            dataType: "json",
            type: 'GET',
            url: "generarCalendario",
            data: {desde: formatoFecha(desde), hasta: formatoFecha(hasta)},
            beforeSend: function() {
                $("#coverDisplay").css({
                    "opacity": "1",
                    "width": "100%",
                    "height": "100%"
                });
            },
            success: function(data) {
                $.each(data["habitaciones"], function(i, j) {//Recoore los tipos de habitaciones
                    var tipoCompartida = "";
                    if (j.tipo == "compartida") {
                        tipoCompartida = "compartida";
                    }
                    $.each(j.categorias, function(k, l) {//Recoore las categorias de habitaciones
                        contenidoTablaCalendario.push("<tr class='separadorCategorias " + tipoCompartida + " ocultable idcategoria" + l.id_categoria + "'><td class='tituloCategoria' colspan='23'><span title='" + l.nombre + "'>" + l.nombre + "</span></td></tr>");
                        $.each(l.habitaciones, function(m, n) {//Recoore las habitaciones
                            contenidoTablaCalendario.push("<tr id='idHabitacion-" + n.id_cuarto + "'class='seleccionable ocultable idcategoria" + l.id_categoria + "' data-idHabitacion='" + n.id_cuarto + "' data-nombreHabitacion='" + n.nombre + "' data-capacidadEstandar='" + l.capacidad_estandar + "'  data-capacidadAdicional='" + l.capacidad_adicional + "'><td class='celda-1 cancelarSeleccion'>" + n.nombre + "</td><td class='mediaCelda cancelarSeleccion'></td>");
                            auxFecha = new Date(hoy);
                            i = 20;
                            do {
                                var fechaConFormato = formatoFecha(auxFecha);
                                contenidoTablaCalendario.push("<td class='celda-2 f" + fechaConFormato + " ui-state-default cuadroSelecionable' data-diaCelda='" + fechaConFormato + "' data-dia='" + (i + 1) + "'><span class='mediaCeldaSelecionable'></span></td>");
                                auxFecha.setDate(auxFecha.getDate() + 1); //Sumar un día    
                            } while (--i);
                            contenidoTablaCalendario.push("<td class='mediaCelda cancelarSeleccion'></td></tr>");
                        });
                    });
                });
                contenidoTablaCalendario.push("</table>");
                contenidoTablaCalendario = contenidoTablaCalendario.join("");
                document.getElementById('areaSelecionable').innerHTML = contenidoTablaCalendario;
                $("#tablaCalendario tr.seleccionable").selectable({
                    cancel: ".cancelarSeleccion,a",
                    filter: ".cuadroSelecionable",
                    start: function(event, ui) {

                        cancelarSeleccion();
                        $(document).off("mouseenter", "#tablaCalendario td.celda-2");
                        $(".celda-1", this).addClass("celdaHeaderSelecting"); //Resalto el cuarto y dias seleccionados
                        var idH = parseInt($(this).attr("data-idhabitacion"));
                        $("#idH").val(idH);
                    },
                    selecting: function(event, ui) {
                        var dia = $(ui.selecting).attr("data-dia");
                        $("#celdaHeader" + dia + "").addClass("celdaHeaderSelecting");
                        dia--;
                        $("#celdaHeader" + dia + "").addClass("celdaHeaderSelecting");
                    },
                    unselecting: function(event, ui) {
                        var dia = $(ui.unselecting).attr("data-dia");
                        var primerCeldaSelecionada = $("td.ui-selecting:first", this).attr("data-dia");
                        if (dia - primerCeldaSelecionada != 1) {
                            dia--;
                        }
                        $("#celdaHeader" + dia + "").removeClass("celdaHeaderSelecting");
                    },
                    stop: function() {
                        var flag = true;
                        var cont = 0;
                        $(".ui-selected", this).each(function(i, selected) {//Recorro las celdas seleccionadas
                            if ($(selected).hasClass("cancelarSeleccionOcasional")) {
                                flag = true;
                            }
                            if ($(selected).hasClass("cancelarSeleccion")) {//Si la celda actual tiene la clase cancelarSeleccion entonces
                                $(selected).removeClass("ui-selected");
                                flag = true;
                            } else {//De lo contrario es una celda valida y le sumo uno al contador si es la primera celdao la celda inmediatamente anterior no era valida
                                if (flag) {
                                    cont++;//Cuento las veces que pasa de uan celda valida a una inválida
                                }
                                flag = false;

                            }
                        });
                        if (cont == 1) {//Si cont < 2 entonces fue por que solo paso unsa sola ves de une celda valida a una inválida
                            var posicion = $("td.ui-selected:last", this).position();
                            posicion.top += 37;
                            $("#opcionesReserva").css({
                                top: "" + posicion.top + "px",
                                left: "" + posicion.left + "px",
                                display: "block"
                            });
                            var desde = $(".ui-selected:first", this).attr("data-diaCelda");
                            desde = desde.split("-");
                            desde = new Date(desde[0], desde[1] - 1, desde[2]);

                            var hasta = $(".ui-selected:last", this).attr("data-diaCelda");
                            hasta = hasta.split("-");
                            hasta = new Date(hasta[0], hasta[1] - 1, hasta[2]);

                            hasta.setDate(hasta.getDate() + 1); //Sumar un día  

                            var cantidadNoches = hasta.getTime() - desde.getTime();
                            cantidadNoches = (cantidadNoches / (24 * 3600 * 1000));
                            desde = formatoFechaVista(desde);
                            hasta = formatoFechaVista(hasta);
                            var capacidadEstandar = parseInt($(this).attr("data-capacidadEstandar"));
                            var capacidadAdicional = parseInt($(this).attr("data-capacidadAdicional"));
                            initCrearReserva($(this).data("nombrehabitacion"), $(this).data("idhabitacion"), desde, hasta, cantidadNoches, capacidadEstandar, capacidadAdicional);
                        } else {
                            cancelarSeleccion();
                            $("#contenidoMensajeUsuario").html("Selección inválida.");
                            $("#contenidoMensajeUsuario").addClass("advertencia");
                            $("#mensajesUsuario").show().delay(3000).fadeOut('normal');
                        }
                    }
                });
                var flag = true;
                $.each(data["reservas"], function(i, j) {//Recoore las reservas
                    var llegada = j.fecha_ingreso.split("-");
                    var fechaLlegadaOriginal = new Date(llegada[0], llegada[1] - 1, llegada[2]);
                    var fechaLlegada = new Date(fechaLlegadaOriginal);
                    if (Date.parse(fechaLlegadaOriginal) < Date.parse(hoy)) {
                        fechaLlegada = new Date(hoy);
                    }

                    var en20dias = new Date(hoy);
                    en20dias.setDate(en20dias.getDate() + 20);//Sumar un día  
                    var salida = j.fecha_salida.split("-");
                    var fechaSalidaOriginal = new Date(salida[0], salida[1] - 1, salida[2]);
                    var fechaSalida = new Date(fechaSalidaOriginal);
                    if (Date.parse(fechaSalidaOriginal) > Date.parse(en20dias)) {
                        fechaSalida = new Date(en20dias);
                    }
                    if (Date.parse(fechaLlegadaOriginal) < Date.parse(en20dias) && Date.parse(fechaSalidaOriginal) > Date.parse(hoy)) {
                        var cantidadDias = fechaSalida.getTime() - fechaLlegada.getTime();
                        cantidadDias = Math.round((cantidadDias / (24 * 3600 * 1000)));
                        if (cantidadDias > 0) {
                            for (var i = new Date(fechaLlegada); Date.parse(i) < Date.parse(fechaSalida); i.setDate(i.getDate() + 1)) {
                                $("#idHabitacion-" + j.id_cuarto + " .f" + formatoFecha(i) + "").addClass("cancelarSeleccion")
                            }
                        } else {
                            var i = new Date(fechaLlegada);
                            $("#idHabitacion-" + j.id_cuarto + " .f" + formatoFecha(i) + "").removeClass("cancelarSeleccion").addClass("cancelarSeleccionOcasional");
                        }

                        // console.log(j.usuario_creacion);
                        if (j.usuario_creacion == 0) {
                            var nombreHuesped = "<span class='motor'>" + j.nombre + " " + j.primer_apellido + " " + j.segundo_apellido + "</span>";
                        } else {
                            var nombreHuesped = j.nombre + " " + j.primer_apellido + " " + j.segundo_apellido;
                        }
                        var nota = "";
                        var telefono = "";
                        var agencia = "";
                        // j.total_a_pagar = parseFloat(j.total_a_pagar) + parseFloat(j.impuesto);
                        // j.ingresos = parseFloat(j.ingresos);
                        if (j.nota != "") {
                            nota = " <div class=fila><div class=izq>Nota: </div><div class=der><div class=puntosSuspensivos> <label>" + j.nota + " </label></div></div></div>";
                        }
                        if (j.telefono != "") {
                            telefono = "<div class=fila><div class=izq>Teléfono: </div> <div class=der> <label>" + j.telefono + "</label></div></div>";
                        }
                        if (j.nombre_agencia != "") {
                            agencia = "<div class=fila><div class=izq>Agencia o canal: </div> <div class=der><div class=puntosSuspensivos> <label>" + j.nombre_agencia + "</label></div></div></div>";
                        }
                        if (j.estatus != "bloqueado") {
                            if (j.confirmada != 1) {
                                j.estatus = "noconfirmada";
                                j.borde = "bnoconfirmada";
                            } else if (j.estatus == "fin" && j.pendiente != "0.00") {
                                j.borde = "bfincondeuda";
                            }
                            if (cantidadDias > 0) {
                                if (flag) {
                                    $("#idHabitacion-" + j.id_cuarto + " td.f" + formatoFecha(fechaLlegada) + "").html("<span class='mediaCeldaSelecionable'></span><a href='reserva?id=" + j.id_reserva + "'><span  class='mostrarReserva dias-" + cantidadDias + " " + j.estatus + " " + j.borde + "' data-trigger='hover' data-original-title='" + j.nombre + " " + j.primer_apellido + " " + j.segundo_apellido + "' data-placement='top' data-content='" + telefono + " <div class=fila><div class=izq>Fecha de llegada: </div><div class=der> <label>" + formatoFechaVista(fechaLlegadaOriginal) + " </label></div></div> <div class=fila><div class=izq>Fecha de salida: </div><div class=der> <label>" + formatoFechaVista(fechaSalidaOriginal) + " </label></div></div>    <div class=fila><div class=izq>Total: </div><div class=der> <label>" + j.moneda + " " + j.total_pagar + " </label></div></div>   <div class=fila><div class=izq>Pagado: </div><div class=der> <label>" + j.moneda + " " + j.ingresos + " </label></div></div>  <div class=fila><div class=izq>Pendiente: </div><div class=der> <label class=text-warning>" + j.moneda + " " + j.pendiente + " </label></div></div> " + nota + agencia + " '>" + nombreHuesped + "</span></a>")
                                } else {
                                    $("#idHabitacion-" + j.id_cuarto + " td.f" + formatoFecha(fechaLlegada) + "").append("<a href='reserva?id=" + j.id_reserva + "'><span  class='mostrarReserva dias-" + cantidadDias + " " + j.estatus + " " + j.borde + "' data-trigger='hover' data-original-title='" + j.nombre + " " + j.primer_apellido + " " + j.segundo_apellido + "' data-placement='top' data-content='" + telefono + " <div class=fila><div class=izq>Fecha de llegada: </div><div class=der> <label>" + formatoFechaVista(fechaLlegadaOriginal) + " </label></div></div> <div class=fila><div class=izq>Fecha de salida: </div><div class=der> <label>" + formatoFechaVista(fechaSalidaOriginal) + " </label></div></div>    <div class=fila><div class=izq>Total: </div><div class=der> <label>" + j.moneda + " " + j.total_pagar + " </label></div></div>   <div class=fila><div class=izq>Pagado: </div><div class=der> <label>" + j.moneda + " " + j.ingresos + " </label></div></div>  <div class=fila><div class=izq>Pendiente: </div><div class=der> <label class=text-warning>" + j.moneda + " " + j.pendiente + " </label></div></div> " + nota + agencia + " '>" + nombreHuesped + "</span></a>")
                                    flag = true;
                                }

                            } else {
                                $("#idHabitacion-" + j.id_cuarto + " td.f" + formatoFecha(fechaLlegada) + "").html("<span class='mediaCeldaSelecionable'></span><a class='linkOcasional' href='reserva?id=" + j.id_reserva + "'><span  class='mostrarReserva ocasional dias-" + cantidadDias + " " + j.estatus + " " + j.borde + "' data-trigger='hover' data-original-title='" + j.nombre + " " + j.primer_apellido + " " + j.segundo_apellido + "' data-placement='top' data-content='" + telefono + " <div class=fila><div class=izq>Fecha de llegada: </div><div class=der> <label>" + formatoFechaVista(fechaLlegadaOriginal) + " </label></div></div> <div class=fila><div class=izq>Fecha de salida: </div><div class=der> <label>" + formatoFechaVista(fechaSalidaOriginal) + " </label></div></div>    <div class=fila><div class=izq>Total: </div><div class=der> <label>" + j.moneda + " " + j.total_pagar + " </label></div></div>   <div class=fila><div class=izq>Pagado: </div><div class=der> <label>" + j.moneda + " " + j.ingresos + " </label></div></div>  <div class=fila><div class=izq>Pendiente: </div><div class=der> <label class=text-warning>" + j.moneda + " " + j.pendiente + " </label></div></div> " + nota + agencia + " '></span></a>")
                                flag = false;
                            }
                        }


                    }
                });
                $.each(data["bloqueos"], function(i, j) {
                    var llegada = j.fecha_ingreso.split("-");
                    var fechaLlegadaOriginal = new Date(llegada[0], llegada[1] - 1, llegada[2]);
                    var fechaLlegada = new Date(fechaLlegadaOriginal);
                    if (Date.parse(fechaLlegadaOriginal) < Date.parse(hoy)) {
                        fechaLlegada = new Date(hoy);
                    }

                    var en20dias = new Date(hoy);
                    en20dias.setDate(en20dias.getDate() + 20);//Sumar un día  
                    var salida = j.fecha_salida.split("-");
                    var fechaSalidaOriginal = new Date(salida[0], salida[1] - 1, salida[2]);
                    var fechaSalida = new Date(fechaSalidaOriginal);
                    if (Date.parse(fechaSalidaOriginal) > Date.parse(en20dias)) {
                        fechaSalida = new Date(en20dias);
                    }
                    if (Date.parse(fechaLlegadaOriginal) < Date.parse(en20dias) && Date.parse(fechaSalidaOriginal) > Date.parse(hoy)) {

                        for (var i = new Date(fechaLlegada); Date.parse(i) < Date.parse(fechaSalida); i.setDate(i.getDate() + 1)) {
                            $("#idHabitacion-" + j.id_cuarto + " .f" + formatoFecha(i) + "").addClass("cancelarSeleccion")
                        }
                        var cantidadDias = fechaSalida.getTime() - fechaLlegada.getTime();
                        cantidadDias = Math.round((cantidadDias / (24 * 3600 * 1000)));
                        var nota = "";
                        if (j.nota != "") {
                            nota = " <div class=fila><div class=izq>Nota: </div><div class=der><div class=puntosSuspensivos> <label>" + j.nota + " </label></div></div></div>";
                        }
                        $("#idHabitacion-" + j.id_cuarto + " td.f" + formatoFecha(fechaLlegada) + "").html("<a class='eliminarBloqueo' data-idBloqueo='" + j.id_reserva + "'><span  class='mostrarReserva dias-" + cantidadDias + " " + j.estatus + " bbloqueado' data-trigger='hover' data-original-title='Bloqueada' data-placement='top' data-content='<div class=fila><div class=izq>Inicio: </div><div class=der> <label>" + formatoFechaVista(fechaLlegadaOriginal) + " </label></div></div> <div class=fila><div class=izq>Fin: </div><div class=der> <label>" + formatoFechaVista(fechaSalidaOriginal) + " </label></div></div> " + nota + "'>Bloqueada</span></a>")

                    }
                });
                $("#tablaCalendario a span.mostrarReserva").popover({
                    trigger: "hover",
                    html: true,
                    delay: {
                        show: 300
                    }
                });
                $("#selectMostrarCategorias").trigger('change');
                $("#coverDisplay").css({
                    "opacity": "1",
                    "width": "0%",
                    "height": "0%"});
            },
            error: function() {
            }
        });
    }


    $("#accionCancelarSeleccion").click(function() {
        cancelarSeleccion();
    });
    $("#modalBloquearHabitacion").click(function() {
        cancelarSeleccion();
    });
    $("#abrirNuevaReserva").click(function() {
        cancelarSeleccion();
        $("#modalNuevaReserva").modal({
            backdrop: "static",
            keyboard: false
        }).css({
            width: '960px',
            'margin-left': function() {
                return -($(this).width() / 2);
            }
        });
    });

    $(document).on("mouseenter", "#tablaCalendario td.celda-2", function() {
        $("#calendarioContenedor .celdaHeaderSelecting").removeClass("celdaHeaderSelecting");
        $(this).parent().children('.celda-1').addClass("celdaHeaderSelecting");
    });

    $(document).on("click", "#tablaCalendario .eliminarBloqueo", function() {
        var idReserva = $(this).data("idbloqueo");
        $("#id-reserva").val(idReserva);
        $("#modalEliminarBloqueo").modal();
    });

    $("#selectMostrarCategorias").change(function() {
        if ($(this).val() == "") {
            $("#calendarioContenedor tr").show();
        } else {
            $("#calendarioContenedor tr.ocultable").show();
            $("#calendarioContenedor tr.ocultable:not(.idcategoria" + $(this).val() + ")").hide();
        }
        $.ajax({
            url: "establecerCategoria",
            data: {
                idCategoria: $(this).val(),
            },
            type: 'POST',
            success: function(data) {

            }
        });
    });

    function formatoFecha(fecha) {
        var d = fecha.getDate();
        var m = fecha.getMonth() + 1;
        var y = fecha.getFullYear();
        return y + '-' + (m <= 9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
    }
    function formatoFechaVista(fecha) {
        var d = fecha.getDate();
        var m = fecha.getMonth() + 1;
        var y = fecha.getFullYear();
        return (d <= 9 ? '0' + d : d) + "/" + (m <= 9 ? '0' + m : m) + "/" + y;
    }
    function formatoFechaVista2(fecha) {
        fecha = fecha.split("-");
        return fecha[2] + "/" + fecha[1] + "/" + fecha[0];
    }
    function cancelarSeleccion() {
        $(document).on("mouseenter", "#tablaCalendario td.celda-2", function() {
            $("#calendarioContenedor .celdaHeaderSelecting").removeClass("celdaHeaderSelecting");
            $(this).parent().children('.celda-1').addClass("celdaHeaderSelecting");
        });
        $("#calendarioContenedor .celdaHeaderSelecting").removeClass("celdaHeaderSelecting");
        $("#tablaCalendario td.ui-selected").removeClass("ui-selected");
        $("#tablaCalendario td.hover").removeClass("hover");
        $("#opcionesReserva a").blur();
        $("#opcionesReserva").css("display", "none");
    }
    $("#botonIrHoy").click(function() {
        var today = new Date();
        today = new Date(today.getTime() - (2 * 24 * 3600 * 1000));
        $("#calendario").datepicker("setDate", today);
        generarCalendario(today);
    });
});
